Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.06.2012, 16:45
Интересующийся
Отправить личное сообщение для SDHP Посмотреть профиль Найти все сообщения от SDHP
 
Регистрация: 19.06.2012
Сообщений: 16

Как распилить на массив данные которые пришли!?
Совсем недавно начал изучать аякс и вот напоролся на такую шнягу :\

С помощью $.ajax я отправил запрос.
Получил данные data
Как вытащить их за пределы запроса?
function(data)
{
var text = data;
}
alert(text);

alert() выдаёт, что переменная не определена [undefined]

Последний раз редактировалось SDHP, 19.06.2012 в 17:07.
Ответить с цитированием
  #2 (permalink)  
Старый 19.06.2012, 17:17
Новичок на форуме
Отправить личное сообщение для Sanya_Zol Посмотреть профиль Найти все сообщения от Sanya_Zol
 
Регистрация: 19.06.2012
Сообщений: 3

Сообщение от SDHP Посмотреть сообщение
Совсем недавно начал изучать аякс и вот напоролся на такую шнягу :\

С помощью $.ajax я отправил запрос.
Получил данные data
Как вытащить их за пределы запроса?
function(data)
{
var text = data;
}
alert(text);

alert() выдаёт, что переменная не определена [undefined]

var внутри функции создает локальную перменную
сделать её глобальной можно, убрав var
function(data){text = data;}

не смотря на то, что в случае отсутствия var создается глобальная переменная, чтобы исключить совпадение с локальными переменными функций/замыкания можно явно указать, что переменная - глобальная (является свойством window)
function(data){window.text = data;}


учти, что если ты делаешь запрос через $.ajax (который по умолчанию асинхронный), то код ниже продолжит выполняться до его завершения

$.ajax({
...
success:function(data){window.text=data;}
});
alert(window.text); // неверно! выведет undefined
Ответить с цитированием
  #3 (permalink)  
Старый 19.06.2012, 17:32
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

SDHP,

1.Выложите код запроса, проще и правильней делать обработку в callback функции по возвращении Аякс-запроса
2. Можно сохранять в глобальную переменную - выставлять глобальный флаг , тестить по таймеру флаг (Не Айс
Ответить с цитированием
  #4 (permalink)  
Старый 19.06.2012, 17:51
Интересующийся
Отправить личное сообщение для SDHP Посмотреть профиль Найти все сообщения от SDHP
 
Регистрация: 19.06.2012
Сообщений: 16

Сообщение от Sanya_Zol Посмотреть сообщение
var внутри функции создает локальную перменную
сделать её глобальной можно, убрав var
function(data){text = data;}

не смотря на то, что в случае отсутствия var создается глобальная переменная, чтобы исключить совпадение с локальными переменными функций/замыкания можно явно указать, что переменная - глобальная (является свойством window)
function(data){window.text = data;}


учти, что если ты делаешь запрос через $.ajax (который по умолчанию асинхронный), то код ниже продолжит выполняться до его завершения

$.ajax({
...
success:function(data){window.text=data;}
});
alert(window.text); // неверно! выведет undefined
$.?({
...
success:function(data){window.text=data;}
});
alert(window.text); // успех! получи переменную!


А какой запрос использовать чтобы alert(); вывел то, что нужно?
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2012, 17:56
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от SDHP
А какой запрос использовать чтобы alert(); вывел то, что нужно?
SDHP, Изобразите Ваш текущий запрос(не стесняйтесь), тогда ясно будет что поправить
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2012, 18:11
Интересующийся
Отправить личное сообщение для SDHP Посмотреть профиль Найти все сообщения от SDHP
 
Регистрация: 19.06.2012
Сообщений: 16

Сообщение от Deff Посмотреть сообщение
SDHP, Изобразите Ваш текущий запрос(не стесняйтесь), тогда ясно будет что поправить
$.ajax({
      url: "xyGet.php",
      type: "POST",
      data: ({yget : 1}),
      dataType: "json",
      success: function(data){
      	coord = data.y
	}
	});
	alert(coord);
Ответить с цитированием
  #7 (permalink)  
Старый 19.06.2012, 18:21
Новичок на форуме
Отправить личное сообщение для Sanya_Zol Посмотреть профиль Найти все сообщения от Sanya_Zol
 
Регистрация: 19.06.2012
Сообщений: 3

Сообщение от SDHP Посмотреть сообщение
$.ajax({
      url: "xyGet.php",
      type: "POST",
      data: ({yget : 1}),
      dataType: "json",
      success: function(data){
      	coord = data.y
	}
	});
	alert(coord);
в этом то и проблема.. success вызывается ПОСЛЕ alert(coord);
$.ajax({
  url: "xyGet.php",
  type: "POST",
  data: ({yget : 1}),
  dataType: "json",
  success: function(data){
	coord = data.y;
	alert(coord);
  }
});

обрабатывать данные нужно в success-функции

кстати, точка с запятой после присвоения обязательна и может быть опущена только в конце функции.
function(a){
    a=b // верно
}
function(a){
    a=b // неверно
    foo(b)
}

Последний раз редактировалось Sanya_Zol, 19.06.2012 в 18:24.
Ответить с цитированием
  #8 (permalink)  
Старый 19.06.2012, 18:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

$.ajax({
      url: "xyGet.php",
      type: "POST",
      data: ({yget : 1}),
      dataType: "json",
      success: function(data){
      MyCallback (data.y)
	}
	});


function   MyCallback (coord) {
	alert(coord);
}
Ответить с цитированием
  #9 (permalink)  
Старый 19.06.2012, 18:28
Интересующийся
Отправить личное сообщение для SDHP Посмотреть профиль Найти все сообщения от SDHP
 
Регистрация: 19.06.2012
Сообщений: 16

Сообщение от Sanya_Zol Посмотреть сообщение
в этом то и проблема.. success вызывается ПОСЛЕ alert(coord);
$.ajax({
  url: "xyGet.php",
  type: "POST",
  data: ({yget : 1}),
  dataType: "json",
  success: function(data){
	coord = data.y;
	alert(coord);
  }
});

обрабатывать данные нужно в success-функции

кстати, точка с запятой после присвоения обязательна и может быть опущена только в конце функции.
function(a){
    a=b // верно
}
function(a){
    a=b // неверно
    foo(b)
}
А если мне нужно манипулировать с данными, не в success-функции, то что делать?
Ответить с цитированием
  #10 (permalink)  
Старый 19.06.2012, 18:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от SDHP Посмотреть сообщение
Совсем недавно начал изучать аякс и вот напоролся на такую шнягу :\

С помощью $.ajax я отправил запрос.
Получил данные data
Как вытащить их за пределы запроса?
function(data)
{
var text = data;
}
alert(text);

alert() выдаёт, что переменная не определена [undefined]
Читайте мой пост в FAQ.
http://javascript.ru/forum/174893-post67.html
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написал коряво плагин на JS - он работает, а как сделать лучше? Теги: Массив, replace alexben Общие вопросы Javascript 2 11.02.2012 15:21
Как взятые данные с цикла присоединить к одной переменной ? saturn Элементы интерфейса 2 25.11.2011 13:01
Как в dojox.grid.DataGrid отобразить данные из array? aristov Dojo toolkit 1 12.11.2011 16:38
как загрузить массив из файла satyr22 Internet Explorer 4 21.08.2011 21:04
XML данные в массив. Onis Общие вопросы Javascript 7 16.07.2008 00:12